#ifndef NINTERFACESIMUSERMANAGER_H
#define NINTERFACESIMUSERMANAGER_H

#include <QtSql>
#include "ninterfaceusermanager.h"

//реализация интерфейсов (одна из возможных;)

class IUserManagerImpl : public IUserManager    //управление юзерами
{
public:
    IUserManagerImpl() { }

    //методы!
    QByteArray addUser(IDatabase *db, QByteArray userLogin, QByteArray userPass)
    {
        userLogin = QByteArray(userLogin).replace("\"", "").replace("\'", "").replace("\\", "").replace("/", "").replace(" ", "");
        userPass = QByteArray(userPass).replace("\"", "").replace("\'", "").replace("\\", "").replace("/", "").replace(" ", "");

        if ((userLogin.isEmpty()) || (userPass.isEmpty()))
            return "Ошибка: не заполнена форма!";
        else
        {
            QSqlQuery q("");
            q = db->exec(QString("select id from users where login=\'%1\';").arg(QString::fromUtf8(userLogin)));
            int cnt = 0;
            while (q.next())
                cnt ++;

            if (cnt != 0)
                return "Ошибка: пользователь существует!";
            else
            {
                q = db->exec(QString("select id from groups where name=\'user\';"));
                int groupId = 0;
                while (q.next())
                    groupId = q.value(0).toInt();

                //add:)
                if (!db->exec(QString("insert into users values(NULL, \'%1\', \'%2\', %3);").arg(QString::fromUtf8(userLogin)).arg(QString::fromUtf8(userPass)).arg(groupId)).isActive())
                {
                    qDebug("User adding to table users failed!, err: %s", qPrintable(db->lastError().text()));
                    return "Ошибка добавления!";
                }
                else
                    return ("Успешно добавлен пользователь: " + userLogin);
            }
        }
    }

    QByteArray changeUserGroup(IDatabase *db, int curUserId, int groupId)
    {
        if ((curUserId <= 0) || (groupId <= 0))
            return "Ошибка: не заполнена форма!";
        else
        {
            QSqlQuery q("");
            QByteArray userLogin;
            q = db->exec(QString("select id, login from users where id=%1;").arg(curUserId));
            int cnt = 0;
            while (q.next())
            {
                userLogin = q.value(1).toString().toUtf8();
                cnt ++;
            }

            if (cnt != 1)
                return "Ошибка: пользователь не существует!";
            else
            {
                //modify:)
                if (!db->exec(QString("update users set group_id=%1 where id=%2;").arg(groupId).arg(curUserId)).isActive())
                {
                    qDebug("User modify failed!, err: %s", qPrintable(db->lastError().text()));
                    return "Ошибка изменения!";
                }
                else
                    return ("Группа успешно изменена для пользователя " + userLogin);
            }
        }
    }

    virtual ~IUserManagerImpl() { }
};


#endif
